package com.ruan.filter;

import com.alibaba.fastjson.JSON;
import com.ruan.common.Code;
import com.ruan.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 检查用户是否登录
 */

//当用户刷新页面时，浏览器会向服务器重新发送请求，但在刷新时，浏览器可能会丢失会话信息，
// 导致服务器无法识别用户的登录状态，从而导致用户被认为是未登录状态

//@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")
//@Slf4j
//public class LoginCheckFilter implements Filter {
//
//    //路径匹配器，支持通配符
//    public static final AntPathMatcher PATH_MATCHER=new AntPathMatcher();
//
//    @Override
//    public void doFilter(ServletRequest servletRequest,
//                         ServletResponse servletResponse,
//                         FilterChain filterChain) throws IOException, ServletException {
//
//        HttpServletRequest request= (HttpServletRequest) servletRequest;
//        HttpServletResponse response= (HttpServletResponse) servletResponse;
//        request.setCharacterEncoding("utf-8");
//        response.setContentType("text/html;Charset=UTF-8");
//        //1、获取本次请求的URI
//        String requestURI = request.getRequestURI();
//
////        log.info("username->>>>>> {}",request.getSession().getAttribute("employee"));
////        log.info("username->>>>>> {}",request.getSession().getAttribute("admin"));
//
//        //定义不需要处理的请求路径
//        String[] urls=new String[]{
//                "/user/login/admin",
//                "/user/login/employee",
//                "/user/logout",
//                "/user/register",
//                "/sms/getCode",
//                "/user/selectUsername",
//                "/common/**",
//                "/upload/**",
//        };
//        //2、判断本次请求是否需要处理
//        boolean result = check(requestURI, urls);
//
//        //3、如果不需要处理，直接放行
//        if (result){
//            filterChain.doFilter(request,response);
//            return;
//        }else if (request.getSession().getAttribute("employee")!=null){
//            //4、判断登录状态，如果已登录则放行
//            filterChain.doFilter(request,response);
//            return;
//        }else if (request.getSession().getAttribute("admin")!=null) {
//            //4、判断登录状态，如果已登录则放行
//            filterChain.doFilter(request, response);
//            return;
//        }else {
//            //5、如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
//            response.getWriter().write(JSON.toJSONString(new Result(Code.LOGIN_ERR,"用户未登录，无权操作！")));
//            return;
//        }
//
//    }

    /**
     * 路径匹配，检查本次请求是否需要放行
     * @param requestURI
     * @param urls
     * @return
     */
//    public boolean check(String requestURI,String[] urls){
//        for (String url : urls) {
//            boolean result = PATH_MATCHER.match(url, requestURI);
//            if (result){
//                return true;
//            }
//        }
//        return false;
//    }
//}
